# -*- coding: UTF-8 -*-
'''
Name:         Class_XML_ABC.py
 Purpose:      Classe de gestion des XML de config
               

 Author:      ABCPro

 Created:     2007/04/12
 Copyright:   (c) 2007
 Licence:     <your licence>
'''
import os,sys
import xml.dom.minidom as m

class XML_ABC :
    
    Path = '/usr/share/NBS/conf/'
    UserName =  os.popen('whoami').readline().replace('\n','')
    Conf_Xml = Path+'NBS_CONF.xml'
    EnTete = '<?xml version="1.0" encoding="utf-8"?>\n'
    RootNode = '<root>\n'



    def Create_File(self) :
        
        ##Creation des repertoire manquant du PATH
        if (os.path.isdir(self.Path))== True :
            pass
        else :
            os.makedirs(self.Path, mode=0777)
        
        ##Creation du fichier de config
        if (os.path.isfile(self.Conf_Xml))== True :
            pass
        else :
                File = open(self.Conf_Xml,"w")
                File.write(self.EnTete)
                File.write(self.RootNode)
                File.write('<interval>180</interval>\n')
                File.write('<timeON>0</timeON>\n')
                File.write('</root>\n')
                File.close()


    def Construct_Tab(self,balise,fichier) :
        '''Fonctions de creation du fichier de config
          Permet de creer chaque fichier xml de config, pour chaque utilisateur
          Param : balise => correspond a l'intutle de la balise a recupere
                       exemple : "dir" pour les balises <dir>
              fichier => path et nom du xml a parser
                        exemple : "c:\\ABC\\Conf.xml"
           Utilisation
           -----------
    
         Path = os.path.expanduser('~')+'\\ABC\\'
         UserName = os.environ ['USERNAME']
         Conf_Xml = Path+UserName+'.xml'
    
    
           Array = XML.Construct_Tab("dir",Conf_Xml)
               print Array         #Affiche le tableau des elements <dir>
                                           du fichier de config
    
           for Elem in XML.Construct_Tab() :
               print Elem            #Affiche chaque element <dir> un par un
        '''
        doc = m.parse(fichier)
        doc.nodeName 
        p_list = doc.getElementsByTagName(balise)
        Tab = []
        
        for Element in p_list :
            Tab.append(Element.firstChild.data)
        return Tab   
    


    def Insert_Dir(self,Rep,interval,time='0') :
        '''Fonctions de reecriture du fichier de config
        #   Permet de reecrire le fichier de config modif
        #
        #       Utilisation
        #       -----------
        #      XML.Insert_Dir(['Joe','Jack','Jean','Pierre','Jesus'])
        #
        '''
        Old = self.Conf_Xml+'.old'
        Chaine = '</root>' 
        
        #-----------------------------------------------------------#
        #On va récuperer les sfile du fichier pour la reecriture
        doc = m.parse(self.Conf_Xml)
        doc.nodeName 
        p_list = doc.getElementsByTagName('sfile')
        Tabdir = []
        for Element in p_list :
            Tabdir.append(Element.firstChild.data)
        #-----------------------------------------------------------#
   
        ##On cree le backup du fichier de config en .old
        if (os.path.isfile(Old))== True :
            os.remove(Old)
            os.rename(self.Conf_Xml,Old)
        else :
            os.rename(self.Conf_Xml,Old)
        
        ##On reecrit le fichier de config avec le nouveau tableau
        
        File = open(self.Conf_Xml,"a")
        File.write(self.EnTete)
        File.write(self.RootNode)
        File.write('<interval>'+str(interval)+'</interval>\n')
        File.write('<timeON>'+str(time)+'</timeON>\n')
        for Elem in Rep :
            Elem = '<dir>'+ Elem+'</dir>\n'
            File.write(Elem.encode('utf-8'))
        #-----------------------------------------------------------#
            
        #on reecrit les fichier spéciaux    
        for Elem in Tabdir :
            Elem = '<sfile>'+ Elem +'</sfile>\n'
            File.write(Elem)   

        #-----------------------------------------------------------#

        File.write('</root>\n')
        File.close()

         
    def Insert_Dir_specal_File(self,Rep) :
        '''Fonctions de reecriture du fichier de config
        #   Permet de reecrire le fichier de config modif
        #
        #       Utilisation
        #       -----------
        #      XML.Insert_Dir(['Joe','Jack','Jean','Pierre','Jesus'])
        #
        '''
        Old = self.Conf_Xml+'.old'
      
        #On va récuperer les dir du fichier pour la reecriture
        doc = m.parse(self.Conf_Xml)
        doc.nodeName 
        p_list = doc.getElementsByTagName('dir')
        Tabdir = []
        
        for Element in p_list :
            Tabdir.append(Element.firstChild.data)
   
        #On recuper l'interval 
        p_list = doc.getElementsByTagName('interval')
        Tabinter = []
        
        for Element in p_list :
            Tabinter.append(Element.firstChild.data)
   
    
        #On recupere l'etat du timer
        p_list = doc.getElementsByTagName('timeON')
        Tabtimer = []
        
        for Element in p_list :
            Tabtimer.append(Element.firstChild.data)
   
    

        
        
        
        ##On cree le backup du fichier de config en .old
        if (os.path.isfile(Old))== True :
            os.remove(Old)
            os.rename(self.Conf_Xml,Old)
        else :
            os.rename(self.Conf_Xml,Old)
        
        ##On reecrit le fichier de config avec le nouveau tableau
        
        File = open(self.Conf_Xml,"a")
        File.write(self.EnTete)
        File.write(self.RootNode)
        
        #ecriture de la balise interval
        for Elem in Tabinter :
            Elem = '<interval>'+ Elem +'</interval>\n'
            File.write(Elem)
            
        #ecriture de la balise timer
        for Elem in Tabtimer :
            Elem = '<timeON>'+ Elem +'</timeON>\n'
            File.write(Elem)
            
            
       #ecriture de(s) balise dir
        for Elem in Tabdir :
            Elem = '<dir>'+ Elem +'</dir>\n'
            File.write(Elem)
            
        #les fichier speciaux
        for Elem in Rep :
            Elem = '<sfile>'+ Elem +'</sfile>\n'
            File.write(Elem)
            
        File.write('</root>\n')
        File.close()
